home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / gnu / nethack.lha / nethack-3.1 / include / mondata.h < prev    next >
C/C++ Source or Header  |  1993-01-17  |  6KB  |  116 lines

  1. /*    SCCS Id: @(#)mondata.h    3.1    92/11/26    */
  2. /* Copyright (c) 1989 Mike Threepoint                  */
  3. /* NetHack may be freely redistributed.  See license for details. */
  4.  
  5. #ifndef MONDATA_H
  6. #define MONDATA_H
  7.  
  8. #ifndef ALIGN_H
  9. #include "align.h"
  10. #endif
  11.  
  12. #define verysmall(ptr)        ((ptr)->msize < MZ_SMALL)
  13. #define bigmonst(ptr)        ((ptr)->msize >= MZ_LARGE)
  14.  
  15. #define resists_fire(ptr)    (((ptr)->mresists & MR_FIRE) != 0)
  16. #define resists_cold(ptr)    (((ptr)->mresists & MR_COLD) != 0)
  17. #define resists_sleep(ptr)    (((ptr)->mresists & MR_SLEEP) != 0)
  18. #define resists_disint(ptr)    (((ptr)->mresists & MR_DISINT) != 0)
  19. #define resists_elec(ptr)    (((ptr)->mresists & MR_ELEC) != 0)
  20. #define resists_poison(ptr)    (((ptr)->mresists & MR_POISON) != 0)
  21. #define resists_acid(ptr)    (((ptr)->mresists & MR_ACID) != 0)
  22. #define resists_ston(ptr)    (((ptr)->mresists & MR_STONE) != 0)
  23.  
  24. #define is_flyer(ptr)        (((ptr)->mflags1 & M1_FLY) != 0L)
  25. #define is_floater(ptr)        ((ptr)->mlet == S_EYE)
  26. #define is_clinger(ptr)        (((ptr)->mflags1 & M1_CLING) != 0L)
  27. #define is_swimmer(ptr)        (((ptr)->mflags1 & M1_SWIM) != 0L)
  28. #define magic_breathing(ptr)    (((ptr)->mflags1 & M1_AMPHIBIOUS) != 0L)
  29. #define passes_walls(ptr)    (((ptr)->mflags1 & M1_WALLWALK) != 0L)
  30. #define amorphous(ptr)        (((ptr)->mflags1 & M1_AMORPHOUS) != 0L)
  31. #define noncorporeal(ptr)    ((ptr)->mlet == S_GHOST)
  32. #define tunnels(ptr)        (((ptr)->mflags1 & M1_TUNNEL) != 0L)
  33. #define needspick(ptr)        (((ptr)->mflags1 & M1_NEEDPICK) != 0L)
  34. #define hides_under(ptr)    (((ptr)->mflags1 & M1_CONCEAL) != 0L)
  35. #define is_hider(ptr)        (((ptr)->mflags1 & M1_HIDE) != 0L)
  36. #define haseyes(ptr)        (((ptr)->mflags1 & M1_NOEYES) == 0L)
  37. #define nohands(ptr)        (((ptr)->mflags1 & M1_NOHANDS) != 0L)
  38. #define nolimbs(ptr)        (((ptr)->mflags1 & M1_NOLIMBS) == M1_NOLIMBS)
  39. #define has_head(ptr)        (((ptr)->mflags1 & M1_NOHEAD) == 0L)
  40. #define is_whirly(ptr)        ((ptr)->mlet == S_VORTEX || \
  41.                  (ptr) == &mons[PM_AIR_ELEMENTAL])
  42. #define mindless(ptr)        (((ptr)->mflags1 & M1_MINDLESS) != 0L)
  43. #define humanoid(ptr)        (((ptr)->mflags1 & M1_HUMANOID) != 0L)
  44. #define is_animal(ptr)        (((ptr)->mflags1 & M1_ANIMAL) != 0L)
  45. #define slithy(ptr)        (((ptr)->mflags1 & M1_SLITHY) != 0L)
  46. #define is_meaty(ptr)        (!amorphous(ptr) && \
  47.                  (ptr)->mlet != S_BLOB && \
  48.                  (ptr)->mlet != S_JELLY && \
  49.                  (ptr)->mlet != S_FUNGUS)
  50. #define is_wooden(ptr)        ((ptr) == &mons[PM_WOOD_GOLEM])
  51. #define thick_skinned(ptr)    (((ptr)->mflags1 & M1_THICK_HIDE) != 0L)
  52. #define lays_eggs(ptr)        (((ptr)->mflags1 & M1_OVIPAROUS) != 0L)
  53. #define regenerates(ptr)    (((ptr)->mflags1 & M1_REGEN) != 0L)
  54. #define perceives(ptr)        (((ptr)->mflags1 & M1_SEE_INVIS) != 0L)
  55. #define can_teleport(ptr)    (((ptr)->mflags1 & M1_TPORT) != 0L)
  56. #define control_teleport(ptr)    (((ptr)->mflags1 & M1_TPORT_CNTRL) != 0L)
  57. #define telepathic(ptr)        ((ptr) == &mons[PM_FLOATING_EYE] || \
  58.                  (ptr) == &mons[PM_MIND_FLAYER])
  59. #define is_armed(ptr)        attacktype(ptr, AT_WEAP)
  60. #define acidic(ptr)        (((ptr)->mflags1 & M1_ACID) != 0L)
  61. #define poisonous(ptr)        (((ptr)->mflags1 & M1_POIS) != 0L)
  62. #define carnivorous(ptr)    (((ptr)->mflags1 & M1_CARNIVORE) != 0L)
  63. #define herbivorous(ptr)    (((ptr)->mflags1 & M1_HERBIVORE) != 0L)
  64. #define metallivorous(ptr)    (((ptr)->mflags1 & M1_METALLIVORE) != 0L)
  65. #define polyok(ptr)        (((ptr)->mflags2 & M2_NOPOLY) == 0L)
  66. #define is_undead(ptr)        (((ptr)->mflags2 & M2_UNDEAD) != 0L)
  67. #define is_were(ptr)        (((ptr)->mflags2 & M2_WERE) != 0L)
  68. #define is_elf(ptr)        (((ptr)->mflags2 & M2_ELF) != 0L)
  69. #define is_dwarf(ptr)        (((ptr)->mflags2 & M2_DWARF) != 0L)
  70. #define is_giant(ptr)        (((ptr)->mflags2 & M2_GIANT) != 0L)
  71. #define is_golem(ptr)        ((ptr)->mlet == S_GOLEM)
  72. #define is_domestic(ptr)    (((ptr)->mflags2 & M2_DOMESTIC) != 0L)
  73. #define is_orc(ptr)        (((ptr)->mflags2 & M2_ORC) != 0L)
  74. #define is_human(ptr)        (((ptr)->mflags2 & M2_HUMAN) != 0L)
  75. #define is_demon(ptr)        (((ptr)->mflags2 & M2_DEMON) != 0L)
  76. #define is_mercenary(ptr)    (((ptr)->mflags2 & M2_MERC) != 0L)
  77. #define is_male(ptr)        (((ptr)->mflags2 & M2_MALE) != 0L)
  78. #define is_female(ptr)        (((ptr)->mflags2 & M2_FEMALE) != 0L)
  79. #define is_neuter(ptr)        (((ptr)->mflags2 & M2_NEUTER) != 0L)
  80. #define is_wanderer(ptr)    (((ptr)->mflags2 & M2_WANDER) != 0L)
  81. #define always_hostile(ptr)    (((ptr)->mflags2 & M2_HOSTILE) != 0L)
  82. #define always_peaceful(ptr)    (((ptr)->mflags2 & M2_PEACEFUL) != 0L)
  83. #define extra_nasty(ptr)    (((ptr)->mflags2 & M2_NASTY) != 0L)
  84. #define strongmonst(ptr)    (((ptr)->mflags2 & M2_STRONG) != 0L)
  85. #  ifdef POLYSELF
  86. #define can_breathe(ptr)    attacktype(ptr, AT_BREA)
  87. #define cantwield(ptr)        (nohands(ptr) || verysmall(ptr))
  88. #define cantweararm(ptr)    (breakarm(ptr) || sliparm(ptr))
  89. #  endif /* POLYSELF */
  90. #define throws_rocks(ptr)    (((ptr)->mflags2 & M2_ROCKTHROW) != 0L)
  91. #define type_is_pname(ptr)    (((ptr)->mflags2 & M2_PNAME) != 0L)
  92. #define is_lord(ptr)        (((ptr)->mflags2 & M2_LORD) != 0L)
  93. #define is_prince(ptr)        (((ptr)->mflags2 & M2_PRINCE) != 0L)
  94. #define is_ndemon(ptr)        (is_demon(ptr) && \
  95.                  (((ptr)->mflags2 & (M2_LORD|M2_PRINCE)) == 0L))
  96. #define is_dlord(ptr)        (is_demon(ptr) && is_lord(ptr))
  97. #define is_dprince(ptr)        (is_demon(ptr) && is_prince(ptr))
  98. #define is_minion(ptr)        ((ptr)->mflags2 & M2_MINION)
  99. #define is_lminion(ptr)        (is_minion(ptr) && \
  100.                  (ptr)->maligntyp >= A_COALIGNED)
  101. #define likes_gold(ptr)        (((ptr)->mflags2 & M2_GREEDY) != 0L)
  102. #define likes_gems(ptr)        (((ptr)->mflags2 & M2_JEWELS) != 0L)
  103. #define likes_objs(ptr)        (((ptr)->mflags2 & M2_COLLECT) != 0L || \
  104.                  is_armed(ptr))
  105. #define likes_magic(ptr)    (((ptr)->mflags2 & M2_MAGIC) != 0L)
  106. #define is_longworm(ptr)    (((ptr) == &mons[PM_BABY_LONG_WORM]) || \
  107.                  ((ptr) == &mons[PM_LONG_WORM]) || \
  108.                  ((ptr) == &mons[PM_LONG_WORM_TAIL]))
  109. #define is_covetous(ptr)    ((ptr->mflags3 & M3_COVETOUS))
  110. #define is_mplayer(ptr)        (((ptr) >= &mons[PM_ARCHEOLOGIST]) && \
  111.                  ((ptr) <= &mons[PM_WIZARD]))
  112. #define is_rider(ptr)        ((ptr) == &mons[PM_DEATH] || \
  113.                  (ptr) == &mons[PM_FAMINE] || \
  114.                  (ptr) == &mons[PM_PESTILENCE])
  115. #endif /* MONDATA_H */
  116.